package com.xca.znb.view;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.xca.znb.R;
import com.xca.znb.contact.UpdatePasswordContact;
import com.xca.znb.model.impl.UpdatePasswordImpl;
import com.xca.znb.presenter.UpdatePasswordPresenter;

public class UpdateLoginPassword extends AppCompatActivity implements UpdatePasswordContact {
    private ImageButton loginPawBack ;  ///返回按钮的ImageButton
    private UpdatePasswordPresenter presenter ;  //处理密码跟新逻辑
    private EditText oldPaw , newPaw , newPawAgain;  //三个密码输入的EditText控件。
    private Button Submit ;   //提交密码的button。
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update_login_password);
        loginPawBack = findViewById(R.id.loginPaw_back_btn);
        oldPaw = findViewById(R.id.old_login_password);
        newPaw = findViewById(R.id.new_login_password);
        newPawAgain = findViewById(R.id.new_login_password_again);
        Submit = findViewById(R.id.submit_login_password) ;


        //通过 findViewById 方法，代码获取了布局中的视图组件，并将其赋值给类成员变量：
        //1.loginPawBack：返回按钮的ImageButton。
        //2.oldPaw、newPaw、newPawAgain：三个密码输入的EditText控件。
        //3.Submit：提交密码的Button。

        UpdatePasswordImpl updatePassword = new UpdatePasswordImpl(this);
        presenter = new UpdatePasswordPresenter(this,updatePassword);

        //创建 UpdatePasswordImpl 的实例，实现了密码更新逻辑的类。构造函数中接收 Context 参数。

        Submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String oldPsw = oldPaw.getText().toString();  //从 oldPaw EditText 控件中获取用户输入的旧密码。
                String newPsw = newPaw.getText().toString();  //从 newPaw EditText 控件中获取用户输入的新密码。
                String newAgain = newPawAgain.getText().toString();  //从 newPawAgain EditText 控件中获取用户再次输入的新密码

                if (TextUtils.isEmpty(oldPsw)||TextUtils.isEmpty(newPsw)||TextUtils.isEmpty(newAgain)){
                    Toast.makeText(UpdateLoginPassword.this, "所有字段都必须填写", Toast.LENGTH_SHORT).show();
                    return;  //使用 TextUtils.isEmpty 方法检查三个字符串（旧密码、新密码、确认新密码）是否为空。
                }
                if (oldPsw.isEmpty()){
                    Toast.makeText(UpdateLoginPassword.this, "请输入原密码", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (newPsw.isEmpty()){
                    Toast.makeText(UpdateLoginPassword.this, "新密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (newAgain.isEmpty()){
                    Toast.makeText(UpdateLoginPassword.this, "确认密码不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (oldPsw.equals(newPsw)){
                    Toast.makeText(UpdateLoginPassword.this, "新旧密码不能一致", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!newPsw.equals(newAgain)){
                    Toast.makeText(UpdateLoginPassword.this, "两次密码不一致", Toast.LENGTH_SHORT).show();
                    return;
                }
                SharedPreferences sharedPreferences = getSharedPreferences("loginPhone", Context.MODE_PRIVATE);
                String phone = sharedPreferences.getString("phone" , ""); //从 SharedPreferences 获取存储的手机号
                presenter.updatePassword(phone ,oldPsw , newPsw);  //调用 Presenter 的 updatePassword 方法，传入手机号、旧密码和新密码进行密码更新。
                boolean isUpdate = presenter.updateLoginSuccessful(phone,newPsw); //调用 Presenter 的方法检查密码更新是否成功。
                if (isUpdate){
                    finish();
                    Toast.makeText(UpdateLoginPassword.this, "密码修改成功", Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(UpdateLoginPassword.this, "原密码错误", Toast.LENGTH_SHORT).show();
                }
            }
        });   //使用了 Toast 来显示操作结果或错误信息，这是一种快速反馈给用户的方法。

        loginPawBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }   //; 这行代码调用了 Activity 的 onBackPressed 方法。当用户点击返回按钮（无论是物理返回按钮还是应用内的返回按钮）时，Android 系统会自动调用这个方法。
        });
    }


    @Override
    public void defaultSetPassword() {

    }

    @Override
    public void oldPasswordWrong() {
        Toast.makeText(this, "原密码错误", Toast.LENGTH_SHORT).show();
    }
}
